# @Time    :2025/3/31 20:52
"""
题目 2：property 的应用
创建一个 Rectangle 类，包含私有属性 __width 和 __height，
通过 property 装饰器实现对这两个属性的读写操作，并在设置属性时进行合法性检查（宽度和高度必须大于 0）。
同时，实现一个只读属性 area 用于计算矩形的面积。

"""

class Rectangle:
    def __init__(self, width=0, height=0):#def __init__(self, width=0, height=0): 这样的写法是为了给 width 和 height 参数提供默认值，防止
        self.__width = width             #而 def __init__(self, width, height): 则要求调用时必须传入这两个参数。
        self.__height = height


    @property
    def width(self):
        return self.__width

    @width.setter
    def width(self, width):
        if width > 0:
            self.__width = width
        else:
            print("你输入的宽度不合法，应该大于0")

    @property
    def height(self):
        return self.__height

    @height.setter
    def height(self, height):
        if height > 0:
            self.__height = height
            self.__height = height
        else:
            print("你输入的高度不合法，应该大于0")

    @property
    def area(self):
        return self.__height * self.__width


r1 = Rectangle(12, 2)
print(f"修改前矩形的面积是{r1.area}")
r1.height=10
r1.width=10
print(f"修改后矩形的面积是{r1.area}")
r1.width=-1# 校验 你输入的高度不合法，应该大于0